#!/usr/bin/env python3
"""
数据库分析运行脚本
用于执行数据库探索和分析
"""

from explore_database import DatabaseExplorer
import sys
import os

def run_analysis():
    """运行完整的数据库分析"""
    print("🔍 开始数据库分析...")
    
    # 检查数据库文件是否存在
    if not os.path.exists('database.json'):
        print("❌ 错误: 找不到 database.json 文件")
        return
    
    try:
        # 创建数据库探索器
        explorer = DatabaseExplorer('database.json')
        
        # 提取数据
        print("📊 提取请求数据...")
        df = explorer.extract_request_data()
        print(f"✅ 成功提取 {len(df)} 条记录")
        
        # 生成报告
        print("\n📋 生成分析报告...")
        report = explorer.generate_report()
        
        # 保存报告到文件
        with open('analysis_report.txt', 'w', encoding='utf-8') as f:
            f.write(report)
        print("✅ 报告已保存到 analysis_report.txt")
        
        # 显示基本信息
        print("\n" + "="*50)
        print("📈 数据库基本信息")
        print("="*50)
        
        info = explorer.get_database_info()
        print(f"总表数: {info['total_tables']}")
        print(f"总请求数: {info['total_requests']}")
        
        if info['timestamp_range']:
            print(f"时间范围: {info['timestamp_range']['start']} 到 {info['timestamp_range']['end']}")
        
        # 状态码分析
        print("\n🔢 状态码分布:")
        status_analysis = explorer.analyze_status_codes()
        for _, row in status_analysis.iterrows():
            print(f"  {row['status_code']}: {row['count']} ({row['percentage']}%)")
        
        # 响应大小分析
        print("\n📦 响应大小分析:")
        size_analysis = explorer.analyze_response_sizes()
        print(f"  平均: {size_analysis['mean']:.2f} KB")
        print(f"  中位数: {size_analysis['median']:.2f} KB")
        print(f"  最大: {size_analysis['max']:.2f} KB")
        print(f"  最小: {size_analysis['min']:.2f} KB")
        
        # 域名分析
        print("\n🌐 域名分布 (Top 5):")
        domain_analysis = explorer.analyze_domains()
        for _, row in domain_analysis.head(5).iterrows():
            print(f"  {row['domain']}: {row['count']} ({row['percentage']}%)")
        
        # 查找异常
        large_responses = explorer.find_large_responses(100)
        error_responses = explorer.find_error_responses()
        
        print(f"\n⚠️  异常请求:")
        print(f"  大响应 (>100KB): {len(large_responses)} 个")
        print(f"  错误响应 (>=400): {len(error_responses)} 个")
        
        # 如果有大响应，显示前5个
        if len(large_responses) > 0:
            print("\n📊 大型响应 (Top 5):")
            for _, row in large_responses.head(5).iterrows():
                print(f"  ID: {row['request_id']}, 大小: {row['response_size_kb']} KB, 状态: {row['status_code']}")
                print(f"     URL: {row['url'][:80]}...")
        
        # 如果有错误响应，显示前5个
        if len(error_responses) > 0:
            print("\n❌ 错误响应 (Top 5):")
            for _, row in error_responses.head(5).iterrows():
                print(f"  ID: {row['request_id']}, 状态码: {row['status_code']}")
                print(f"     时间: {row['timestamp']}")
                print(f"     URL: {row['url'][:80]}...")
        
        # 创建可视化
        print("\n📈 生成可视化图表...")
        try:
            explorer.create_visualizations()
            print("✅ 图表已保存到 database_analysis.png")
        except Exception as e:
            print(f"⚠️  生成图表时出错: {e}")
        
        # 导出CSV
        print("\n💾 导出数据到CSV...")
        try:
            explorer.export_to_csv()
            print("✅ 数据已导出到 database_export.csv")
        except Exception as e:
            print(f"⚠️  导出CSV时出错: {e}")
        
        # 执行一些示例查询
        print("\n🔍 执行示例查询...")
        
        # 查询内部API请求
        internal_requests = explorer.search_requests(domain='internal')
        print(f"内部API请求: {len(internal_requests)} 个")
        
        # 查询JSON响应
        json_requests = explorer.search_requests(is_json=True)
        print(f"JSON响应: {len(json_requests)} 个")
        
        # 查询特定状态码
        success_requests = explorer.search_requests(status_code=200)
        print(f"成功响应 (200): {len(success_requests)} 个")
        
        print("\n✅ 分析完成!")
        print("="*50)
        print("📄 生成的文件:")
        print("  - analysis_report.txt (分析报告)")
        print("  - database_analysis.png (可视化图表)")
        print("  - database_export.csv (原始数据)")
        
    except Exception as e:
        print(f"❌ 分析过程中出错: {e}")
        import traceback
        traceback.print_exc()

def show_help():
    """显示帮助信息"""
    print("""
数据库分析工具

使用方法:
    python run_analysis.py

功能:
    - 分析数据库结构和内容
    - 生成统计报告
    - 创建可视化图表
    - 导出数据到CSV
    - 查找异常请求

生成的文件:
    - analysis_report.txt: 详细分析报告
    - database_analysis.png: 可视化图表
    - database_export.csv: 原始数据CSV文件
    """)

if __name__ == "__main__":
    if len(sys.argv) > 1 and sys.argv[1] in ['-h', '--help']:
        show_help()
    else:
        run_analysis()